{ "cells": [ { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import os\n", "import pickle\n", "from celluloid import Camera\n", "import matplotlib.pyplot as plt\n", "from tqdm.notebook import tqdm\n", "import torch\n", "from torch import nn\n", "from torch.nn import functional as F\n", "from torch.utils.data import DataLoader, Dataset\n", "import numpy as np\n", "from typing import List\n", "import easydict" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 데이터 불러오기" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
timestampsensor_00sensor_01sensor_02sensor_03sensor_04sensor_05sensor_06sensor_07sensor_08...sensor_43sensor_44sensor_45sensor_46sensor_47sensor_48sensor_49sensor_50sensor_51machine_status
02018-04-01 00:00:002.46539447.0920153.211846.310760634.375076.4597513.4114616.1313615.56713...41.9270839.64120065.6828750.9259338.194440157.986167.70834243.0556201.3889NORMAL
12018-04-01 00:01:002.46539447.0920153.211846.310760634.375076.4597513.4114616.1313615.56713...41.9270839.64120065.6828750.9259338.194440157.986167.70834243.0556201.3889NORMAL
22018-04-01 00:02:002.44473447.3524353.211846.397570638.888973.5459813.3246516.0373315.61777...41.6666639.35185265.3935251.2152838.194443155.960667.12963241.3194203.7037NORMAL
32018-04-01 00:03:002.46047447.0920153.168446.397568628.125076.9889813.3174216.2471115.69734...40.8854139.06250064.8148151.2152838.194440155.960666.84028240.4514203.1250NORMAL
42018-04-01 00:04:002.44571847.1354153.211846.397568636.458376.5889713.3535916.2109415.69734...41.4062538.77315065.1041651.7939838.773150158.275566.55093242.1875201.3889NORMAL
\n", "

5 rows × 54 columns

\n", "
" ], "text/plain": [ " timestamp sensor_00 sensor_01 sensor_02 sensor_03 sensor_04 \\\n", "0 2018-04-01 00:00:00 2.465394 47.09201 53.2118 46.310760 634.3750 \n", "1 2018-04-01 00:01:00 2.465394 47.09201 53.2118 46.310760 634.3750 \n", "2 2018-04-01 00:02:00 2.444734 47.35243 53.2118 46.397570 638.8889 \n", "3 2018-04-01 00:03:00 2.460474 47.09201 53.1684 46.397568 628.1250 \n", "4 2018-04-01 00:04:00 2.445718 47.13541 53.2118 46.397568 636.4583 \n", "\n", " sensor_05 sensor_06 sensor_07 sensor_08 ... sensor_43 sensor_44 \\\n", "0 76.45975 13.41146 16.13136 15.56713 ... 41.92708 39.641200 \n", "1 76.45975 13.41146 16.13136 15.56713 ... 41.92708 39.641200 \n", "2 73.54598 13.32465 16.03733 15.61777 ... 41.66666 39.351852 \n", "3 76.98898 13.31742 16.24711 15.69734 ... 40.88541 39.062500 \n", "4 76.58897 13.35359 16.21094 15.69734 ... 41.40625 38.773150 \n", "\n", " sensor_45 sensor_46 sensor_47 sensor_48 sensor_49 sensor_50 \\\n", "0 65.68287 50.92593 38.194440 157.9861 67.70834 243.0556 \n", "1 65.68287 50.92593 38.194440 157.9861 67.70834 243.0556 \n", "2 65.39352 51.21528 38.194443 155.9606 67.12963 241.3194 \n", "3 64.81481 51.21528 38.194440 155.9606 66.84028 240.4514 \n", "4 65.10416 51.79398 38.773150 158.2755 66.55093 242.1875 \n", "\n", " sensor_51 machine_status \n", "0 201.3889 NORMAL \n", "1 201.3889 NORMAL \n", "2 203.7037 NORMAL \n", "3 203.1250 NORMAL \n", "4 201.3889 NORMAL \n", "\n", "[5 rows x 54 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## 데이터 불러오기\n", "df = pd.read_csv('sensor.csv', index_col=0)\n", "df.head()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5ffaee7333f04ffe8e0afde1890ef3d0", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, max=52.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "MovieWriter ffmpeg unavailable; using Pillow instead.\n", "c:\\program files\\python37\\lib\\site-packages\\ipykernel_launcher.py:43: MatplotlibDeprecationWarning: savefig() got unexpected keyword argument \"frameon\" which is no longer supported as of 3.3 and will become an error two minor releases later\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6sAAAFlCAYAAAANn35oAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAABXtUlEQVR4nO3dd7gU1f3H8c+59wIWBCygCKKgiAUVBZFYiF0ssf0sWKJRIypq1KiJGqPEXqMxRmIBW6yxEsWCFRtKERFUpAgC0qQj/d7z++PMsLO7s3337tzl/Xqe++zu7OzMuffOzsz3nO85x1hrBQAAAABAlFSVuwAAAAAAACQiWAUAAAAARA7BKgAAAAAgcghWAQAAAACRQ7AKAAAAAIgcglUAAAAAQOTUlLsAmWy22WZ2m222KXcxEGLNil9UU10bW2CqpZoN62dfmZSwLICvPr8DKffNsY4KlfN5v5iK8L1avXK1GjVpVKQCIRtrVvyimhpxTgQamJEjR/5srW0Z9l7kg9VtttlGI0aMKHcxEGLC0DfVsXPguFoxV9qyV/3sK5MSlgXw1ed3IOW+OdZRoXI+7xdTEb5X334yUjvu07VIBUI2Jgx9Ux23E+dEoIExxkxN9R5pwAAAAACAyCFYBQAAAABEDsEqAAAAACByIt9nFQAAAADq0/LlyzV58mTV1pZpoLcKVF1drQ4dOmj99dfP+jMEqwAAAAAQMHnyZG222WZq2bKlqqpIRi1UXV2d5s6dq8mTJ2vnnXfO+nP85QEAAAAgoLa2lkC1iKqqqtSyZcucW6r56wMAAABAAgLV4srn78l/AAAAAAAQOQSrAAAAAICMunfvrvbt22uHHXbQDjvsoBkzZkiS3nzzTe20006qqanRY489VrT9ZQxWjTFbGWPeN8Z8Y4wZZ4y5xFu+iTFmiDFmgve4sbfcGGPuM8ZMNMaMMcbsEdjWmd76E4wxZxbttwAAAAAAFKyuri5t39InnnhC3333nb777ju1adNGktS+fXs9+uijOvroo4talmxGA14j6XJr7ShjzEaSRhpjhkj6naR3rbW3GWOuknSVpD9LOlxSR+9nL0n9Je1ljNlE0vWSukmy3nYGWWsXFPU3AgAAAIAi+dMLX2n8rCVF3WanLTbSHSfslvL9xYsX6+ijj9bMmTNVV1enq666Sp06ddJll12mZcuWaZNNNtF//vMfbb311urevbu6deumjz/+WIsXL9aDDz6oww47TCNHjtRZZ52lVatWqa6uTi+99JI6d+6sfv366amnnpIknXHGGfrrX/+q8ePHq1evXtp99901ZswYDR48WNtvv332v0+nTpKK3883Y7BqrZ0paab3fIkx5ltJbSQdI2l/b7XHJX0gF6weI+kJa62VNMwY08IY09pbd4i1dr4keQFvL0nPFPH3AQAAAIAG7eWXX9YWW2yhDz74QJI0b948HXzwwXr99de15ZZbasCAAbryyiv1/PPPS5LWrFmjMWPG6L///a/+9re/6bDDDtM///lP9e3bV+eff75WrFih2tpaffzxx3r66ac1cuRIWWvVtWtXHXTQQdp00001depUDRgwQAceeGDasp1zzjmqqqrSb37zG91+++0lHYgqp3lWjTHbSNpd0ueSNvcCWUmaJWlz73kbSdMCH5vuLUu1PGw/fST1kaR27drlUkQAAAAAKJp0LaClsscee+iaa65R3759dcwxx2jTTTfVhAkT1gaSdXV1atWq1dr1TzzxREnSr371K11++eVrn995552aNm2aTjnlFHXu3FkffPCBjjjiCDVr1kySdNRRR+n999/XCSecoNatW2cMVJ977jm1b99eCxcu1FFHHaX+/fvrwgsvLMWfQFIOAywZY5pKelHSpdbaxcH3vFZUW6xCWWsfstZ2s9Z2a9myZbE2CwAAAACRt8suu+jLL7/ULrvsomuvvVbPPvustttuu7V9Rb///nt9/PHHa9dfb731JEnV1dVr+5ued955GjRokDbYYAMdeeSR+t///pd2nxtssEHGcrVv316S1KJFC5188sn64osv8v0Vs5JVsGqMaSQXqD5lrX3JWzzbS++V9zjHWz5D0laBj7f1lqVaDgAAAADwTJkyRU2bNtUFF1ygyy+/XMOHD9f8+fP17rvvSpJWrlypkSNHpt3Gt99+qx122EF/+ctf1KtXL40ePVoHHHCABg8erCVLlmjx4sV6/fXXdcABB2RVptWrV2vmzJlr9//666+rc+fOhf2iGWRMAzbGGEkDJH1rrf174K1Bks6UdJv3+Gpg+UXGmGflBlhaZK2daYx5S9It/qjBkg6VdHVxfg0AAAAAqAyjRo3SVVddpaqqKtXU1Kh///6qqanRxRdfrCVLlqi2tlZ9+/ZV165dU27jySef1PPP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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def plot_sensor(temp_df, save_path='sample.gif'):\n", " fig = plt.figure(figsize=(16, 6))\n", " ## 에니메이션 만들기\n", " camera = Camera(fig)\n", " ax=fig.add_subplot(111)\n", " \n", " ## 불량 구간 탐색 데이터\n", " labels = temp_df['machine_status'].values.tolist()\n", " dates = temp_df.index\n", " \n", " for var_name in tqdm([item for item in df.columns if 'sensor_' in item]):\n", " temp_df[var_name].plot(ax=ax)\n", " ax.legend([var_name], loc='upper right')\n", " \n", " ## 고장구간 표시\n", " temp_start = dates[0]\n", " temp_date = dates[0]\n", " temp_label = labels[0]\n", " \n", " for xc, value in zip(dates, labels):\n", " if temp_label != value:\n", " if temp_label == \"BROKEN\":\n", " ax.axvspan(temp_start, temp_date, alpha=0.2, color='blue')\n", " if temp_label == \"RECOVERING\":\n", " ax.axvspan(temp_start, temp_date, alpha=0.2, color='orange')\n", " temp_start=xc\n", " temp_label=value\n", " temp_date = xc\n", " if temp_label == \"BROKEN\":\n", " ax.axvspan(temp_start, xc, alpha=0.2, color='blue')\n", " if temp_label == \"RECOVERING\":\n", " ax.axvspan(temp_start, xc, alpha=0.2, color='orange')\n", " ## 카메라 찍기\n", " camera.snap()\n", " \n", " animation = camera.animate(500, blit=True)\n", " # .gif 파일로 저장하면 끝!\n", " animation.save(\n", " save_path,\n", " dpi=100,\n", " savefig_kwargs={\n", " 'frameon': False,\n", " 'pad_inches': 'tight'\n", " }\n", " )\n", "plot_sensor(df, 'merge.gif')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 데이터 전처리" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "## 데이터 Type 변경\n", "df['date'] = pd.to_datetime(df['timestamp'])\n", "for var_index in [item for item in df.columns if 'sensor_' in item]:\n", " df[var_index] = pd.to_numeric(df[var_index], errors='coerce')\n", "del df['timestamp']\n", "\n", "## 날짜로 sorting\n", "df = df.set_index('date')\n", "df = df.reset_index()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "## 결측 변수 확인\n", "(df.isnull().sum()/len(df)).plot.bar(figsize=(18, 8), colormap='Paired')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "## 중복된 데이터를 삭제합니다.\n", "df = df.drop_duplicates()\n", "## 센서 15번, 센서 50 은 삭제합\n", "del df['sensor_15']\n", "del df['sensor_50']" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "## 이전 시점의 데이터로 보간\n", "df = df.fillna(method='ffill')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['NORMAL', 'BROKEN', 'RECOVERING'], dtype=object)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['machine_status'].unique()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "normal_df = df[df['machine_status']=='NORMAL']\n", "abnormal_df = df[df['machine_status']!='NORMAL']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 데이터 분리 " ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "normal_df = df[df['machine_status']=='NORMAL']\n", "abnormal_df = df[df['machine_status']!='NORMAL']" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "## 시계열 데이터이고, 입력의 형태가 특정 길이(window size)의 sequence 데이터 이므로 shuffle은 사용하지 않습니다.\n", "## Normal 데이터는 학습데이터, 파라미터 설정데이터, 검증용데이터, 실험용데이터의 비율을 7:1:1:1 로 나누어서 사용합니다.\n", "\n", "interval_n = int(len(normal_df)/10)\n", "normal_df1 = df.iloc[0:interval_n*7]\n", "normal_df2 = df.iloc[interval_n*7:interval_n*8]\n", "normal_df3 = df.iloc[interval_n*8:interval_n*9]\n", "normal_df4 = df.iloc[interval_n*9:]\n", "\n", "## abnormal 데이터는 검증용데이터, 실험용데이터의 비율을 5:5 로 나누어서 사용합니다.\n", "interval_ab = int(len(abnormal_df)/2)\n", "abnormal_df1 = df.iloc[0:interval_ab]\n", "abnormal_df2 = df.iloc[interval_ab:]" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\program files\\python37\\lib\\site-packages\\ipykernel_launcher.py:2: FutureWarning: DataFrame.mean and DataFrame.median with numeric_only=None will include datetime64 and datetime64tz columns in a future version.\n", " \n" ] } ], "source": [ "## 데이터 정규화를 위하여 분산 및 평균 추출\n", "mean_df = normal_df1.mean()\n", "std_df = normal_df1.std()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 데이터 셋 구조" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "## 데이터를 불러올 때 index로 불러오기\n", "def make_data_idx(dates, window_size=1):\n", " input_idx = []\n", " for idx in range(window_size-1, len(dates)):\n", " cur_date = dates[idx].to_pydatetime()\n", " in_date = dates[idx - (window_size-1)].to_pydatetime()\n", " \n", " _in_period = (cur_date - in_date).days * 24 * 60 + (cur_date - in_date).seconds / 60\n", " \n", " ## 각 index가 1분 간격으로 떨어져 있는지를 확인합니다.\n", " if _in_period == (window_size-1):\n", " input_idx.append(list(range(idx - window_size+1, idx+1)))\n", " return input_idx" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "## Dataset을 상속받아 데이터를 구성\n", "class TagDataset(Dataset):\n", " def __init__(self, input_size, df, mean_df=None, std_df = None, window_size=1):\n", " \n", " ## 변수 갯수\n", " self.input_size = input_size\n", " \n", " ## 복원할 sequence 길이\n", " self.window_size = window_size\n", " \n", " ## Summary용 데이터 Deep copy\n", " original_df = df.copy()\n", " \n", " ## 정규화\n", " if mean_df is not None and std_df is not None:\n", " sensor_columns = [item for item in df.columns if 'sensor_' in item]\n", " df[sensor_columns] = (df[sensor_columns]-mean_df)/std_df\n", " \n", " ## 연속한 index를 기준으로 학습에 사용합니다.\n", " dates = list(df['date'])\n", " self.input_ids = make_data_idx(dates, window_size=window_size)\n", " \n", " ## sensor 데이터만 사용하여 reconstruct에 활용\n", " self.selected_column = [item for item in df.columns if 'sensor_' in item][:input_size]\n", " self.var_data = torch.tensor(df[self.selected_column].values, dtype=torch.float)\n", " \n", " ## Summary 용\n", " self.df = original_df.iloc[np.array(self.input_ids)[:, -1]]\n", " \n", " ## Dataset은 반드시 __len__ 함수를 만들어줘야함(데이터 길이)\n", " def __len__(self):\n", " return len(self.input_ids)\n", " \n", " ## Dataset은 반드시 __getitem__ 함수를 만들어줘야함\n", " ## torch 모듈은 __getitem__ 을 호출하여 학습할 데이터를 불러옴.\n", " def __getitem__(self, item):\n", " temp_input_ids = self.input_ids[item]\n", " input_values = self.var_data[temp_input_ids]\n", " return input_values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 모델 만들기" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "## 인코더\n", "class Encoder(nn.Module):\n", "\n", " def __init__(self, input_size=4096, hidden_size=1024, num_layers=2):\n", " super(Encoder, self).__init__()\n", " self.hidden_size = hidden_size\n", " self.num_layers = num_layers\n", " self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True,\n", " dropout=0.1, bidirectional=False)\n", "\n", " def forward(self, x):\n", " outputs, (hidden, cell) = self.lstm(x) # out: tensor of shape (batch_size, seq_length, hidden_size)\n", "\n", " return (hidden, cell)\n", " \n", "## 디코더\n", "class Decoder(nn.Module):\n", "\n", " def __init__(self, input_size=4096, hidden_size=1024, output_size=4096, num_layers=2):\n", " super(Decoder, self).__init__()\n", " self.hidden_size = hidden_size\n", " self.output_size = output_size\n", " self.num_layers = num_layers\n", "\n", " self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True,\n", " dropout=0.1, bidirectional=False)\n", "\n", " self.relu = nn.ReLU()\n", " self.fc = nn.Linear(hidden_size, output_size)\n", " \n", " def forward(self, x, hidden):\n", " output, (hidden, cell) = self.lstm(x, hidden) # out: tensor of shape (batch_size, seq_length, hidden_size)\n", " prediction = self.fc(output)\n", "\n", " return prediction, (hidden, cell)\n", " \n", "## LSTM Auto Encoder\n", "class LSTMAutoEncoder(nn.Module):\n", "\n", " def __init__(self,\n", " input_dim: int,\n", " latent_dim: int,\n", " window_size: int=1,\n", " **kwargs) -> None:\n", " \"\"\"\n", " :param input_dim: 변수 Tag 갯수\n", " :param latent_dim: 최종 압축할 차원 크기\n", " :param window_size: 길이\n", " :param kwargs:\n", " \"\"\"\n", "\n", " super(LSTMAutoEncoder, self).__init__()\n", "\n", " self.latent_dim = latent_dim\n", " self.input_dim = input_dim\n", " self.window_size = window_size\n", "\n", " if \"num_layers\" in kwargs:\n", " num_layers = kwargs.pop(\"num_layers\")\n", " else:\n", " num_layers = 1\n", "\n", " self.encoder = Encoder(\n", " input_size=input_dim,\n", " hidden_size=latent_dim,\n", " num_layers=num_layers,\n", " )\n", " self.reconstruct_decoder = Decoder(\n", " input_size=input_dim,\n", " output_size=input_dim,\n", " hidden_size=latent_dim,\n", " num_layers=num_layers,\n", " )\n", "\n", " def forward(self, src:torch.Tensor, **kwargs):\n", " batch_size, sequence_length, var_length = src.size()\n", "\n", " ## Encoder 넣기\n", " encoder_hidden = self.encoder(src)\n", " \n", " inv_idx = torch.arange(sequence_length - 1, -1, -1).long()\n", " reconstruct_output = []\n", " temp_input = torch.zeros((batch_size, 1, var_length), dtype=torch.float).to(src.device)\n", " hidden = encoder_hidden\n", " for t in range(sequence_length):\n", " temp_input, hidden = self.reconstruct_decoder(temp_input, hidden)\n", " reconstruct_output.append(temp_input)\n", " reconstruct_output = torch.cat(reconstruct_output, dim=1)[:, inv_idx, :]\n", " \n", " return [reconstruct_output, src]\n", "\n", " def loss_function(self,\n", " *args,\n", " **kwargs) -> dict:\n", " recons = args[0]\n", " input = args[1]\n", " \n", " ## MSE loss(Mean squared Error)\n", " loss =F.mse_loss(recons, input)\n", " return loss" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 학습 구성" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "def run(args, model, train_loader, test_loader):\n", " # optimizer 설정\n", " optimizer = torch.optim.Adam(model.parameters(), lr=args.learning_rate)\n", "\n", " ## 반복 횟수 Setting\n", " epochs = tqdm(range(args.max_iter//len(train_loader)+1))\n", " \n", " ## 학습하기\n", " count = 0\n", " best_loss = 100000000\n", " for epoch in epochs:\n", " model.train()\n", " optimizer.zero_grad()\n", " train_iterator = tqdm(enumerate(train_loader), total=len(train_loader), desc=\"training\")\n", "\n", " for i, batch_data in train_iterator:\n", " \n", " if count > args.max_iter:\n", " return model\n", " count += 1\n", " \n", " batch_data = batch_data.to(args.device)\n", " predict_values = model(batch_data)\n", " loss = model.loss_function(*predict_values)\n", "\n", " # Backward and optimize\n", " loss.backward()\n", " optimizer.step()\n", " optimizer.zero_grad()\n", " \n", " train_iterator.set_postfix({\n", " \"train_loss\": float(loss),\n", " })\n", "\n", " model.eval()\n", " eval_loss = 0\n", " test_iterator = tqdm(enumerate(test_loader), total=len(test_loader), desc=\"testing\")\n", " with torch.no_grad():\n", " for i, batch_data in test_iterator:\n", " \n", " batch_data = batch_data.to(args.device)\n", " predict_values = model(batch_data)\n", " loss = model.loss_function(*predict_values)\n", "\n", " eval_loss += loss.mean().item()\n", "\n", " test_iterator.set_postfix({\n", " \"eval_loss\": float(loss),\n", " })\n", " eval_loss = eval_loss / len(test_loader)\n", " epochs.set_postfix({\n", " \"Evaluation Score\": float(eval_loss),\n", " })\n", " if eval_loss < best_loss:\n", " best_loss = eval_loss\n", " else:\n", " if args.early_stop:\n", " print('early stop condition best_loss[{}] eval_loss[{}]'.format(best_loss, eval_loss))\n", " return model\n", " \n", " return model\n", "\n", "def get_loss_list(args, model, test_loader):\n", " test_iterator = tqdm(enumerate(test_loader), total=len(test_loader), desc=\"testing\")\n", " loss_list = []\n", " \n", " with torch.no_grad():\n", " for i, batch_data in test_iterator:\n", " \n", " batch_data = batch_data.to(args.device)\n", " predict_values = model(batch_data)\n", " \n", " ## MAE(Mean Absolute Error)로 계산\n", " loss = F.l1_loss(predict_values[0], predict_values[1], reduce=False)\n", " #loss = loss.sum(dim=2).sum(dim=1).cpu().numpy()\n", " loss = loss.mean(dim=1).cpu().numpy()\n", " loss_list.append(loss)\n", " loss_list = np.concatenate(loss_list, axis=0)\n", " return loss_list\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 모델 & 학습 파라미터 설정" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "## 설정 폴더\n", "args = easydict.EasyDict({\n", " \"batch_size\": 128, ## 배치 사이즈 설정\n", " \"device\": torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu'), ## GPU 사용 여부 설정\n", " \"input_size\": 40, ## 입력 차원 설정\n", " \"latent_size\": 10, ## Hidden 차원 설정\n", " \"output_size\": 40, ## 출력 차원 설정\n", " \"window_size\" : 3, ## sequence Lenght\n", " \"num_layers\": 2, ## LSTM layer 갯수 설정\n", " \"learning_rate\" : 0.001, ## learning rate 설정\n", " \"max_iter\" : 100000, ## 총 반복 횟수 설정\n", " 'early_stop' : True, ## valid loss가 작아지지 않으면 early stop 조건 설정\n", "})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 학습하기" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "c:\\program files\\python37\\lib\\site-packages\\pandas\\core\\frame.py:3062: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " self[k1] = value[k2]\n" ] } ], "source": [ "## 데이터셋으로 변환\n", "normal_dataset1 = TagDataset(df=normal_df1, input_size=args.input_size, window_size=args.window_size, mean_df=mean_df, std_df=std_df)\n", "normal_dataset2 = TagDataset(df=normal_df2, input_size=args.input_size, window_size=args.window_size, mean_df=mean_df, std_df=std_df)\n", "normal_dataset3 = TagDataset(df=normal_df3, input_size=args.input_size, window_size=args.window_size, mean_df=mean_df, std_df=std_df)\n", "normal_dataset4 = TagDataset(df=normal_df4, input_size=args.input_size, window_size=args.window_size, mean_df=mean_df, std_df=std_df)\n", "abnormal_dataset1 = TagDataset(df=abnormal_df1, input_size=args.input_size, window_size=args.window_size, mean_df=mean_df, std_df=std_df)\n", "abnormal_dataset2 = TagDataset(df=abnormal_df2, input_size=args.input_size, window_size=args.window_size, mean_df=mean_df, std_df=std_df)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "## Data Loader 형태로 변환\n", "train_loader = torch.utils.data.DataLoader(\n", " dataset=normal_dataset1,\n", " batch_size=args.batch_size,\n", " shuffle=True)\n", "valid_loader = torch.utils.data.DataLoader(\n", " dataset=normal_dataset2,\n", " batch_size=args.batch_size,\n", " shuffle=False)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LSTMAutoEncoder(\n", " (encoder): Encoder(\n", " (lstm): LSTM(40, 10, num_layers=2, batch_first=True, dropout=0.1)\n", " )\n", " (reconstruct_decoder): Decoder(\n", " (lstm): LSTM(40, 10, num_layers=2, batch_first=True, dropout=0.1)\n", " (relu): ReLU()\n", " (fc): Linear(in_features=10, out_features=40, bias=True)\n", " )\n", ")" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## 모델 생성\n", "model = LSTMAutoEncoder(input_dim=args.input_size, latent_dim=args.latent_size, window_size=args.window_size, num_layers=args.num_layers)\n", "model.to(args.device)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "baf92e0b69814b36aad366d6bd838cc0", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, max=89.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b98b5dc0e6784b699a5825ce45f257f1", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='training', max=1126.0, style=ProgressStyle(description_wi…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0a254695e7e84e659415979aa4ebf72b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='testing', max=161.0, style=ProgressStyle(description_widt…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b2b55483a2404fa3ada59fc1a2ef0e90", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='training', max=1126.0, style=ProgressStyle(description_wi…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b3f1d07f4d4549e098e5a28ffa474728", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='testing', max=161.0, style=ProgressStyle(description_widt…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c435e541b439416197af9aa5ee10ec0d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='training', max=1126.0, style=ProgressStyle(description_wi…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9ef8646c175f48f0827a13c755899465", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='testing', max=161.0, style=ProgressStyle(description_widt…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "54f095ac043e48748a195e34694dc7fb", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='training', max=1126.0, style=ProgressStyle(description_wi…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "19c7f6ffcfd44154935c617fe0894831", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='testing', max=161.0, style=ProgressStyle(description_widt…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "33f66ba4a2a94900a673694998d2ece5", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='training', max=1126.0, style=ProgressStyle(description_wi…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6e83e0f899d94abc9830fd1a219959fd", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='testing', max=161.0, style=ProgressStyle(description_widt…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f372b376aae341efb01922cdb84e9068", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='training', max=1126.0, style=ProgressStyle(description_wi…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "c4cddf702a03426599fb493fcf84f8cc", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='testing', max=161.0, style=ProgressStyle(description_widt…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "74135c07c3db48c489b9bfc1dfbb985b", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='training', max=1126.0, style=ProgressStyle(description_wi…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d0045daf9a2b49efa66f977a5dd0f545", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='testing', max=161.0, style=ProgressStyle(description_widt…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "fdc3f9ad8d6b4868a376c755cc217e6d", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='training', max=1126.0, style=ProgressStyle(description_wi…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "00b9e61034484f7b938468c178251954", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='testing', max=161.0, style=ProgressStyle(description_widt…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "early stop condition best_loss[0.10483759593056596] eval_loss[0.10486975242817624]\n", "\n" ] } ], "source": [ "## 학습하기\n", "model = run(args, model, train_loader, valid_loader)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reconstruction Error 평균 공분산 계산" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1c9cc7cb051744fa9de241fcd75e800a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='testing', max=161.0, style=ProgressStyle(description_widt…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "c:\\program files\\python37\\lib\\site-packages\\torch\\nn\\_reduction.py:44: UserWarning: size_average and reduce args will be deprecated, please use reduction='none' instead.\n", " warnings.warn(warning.format(ret))\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "## Loss를 구하기\n", "loss_list = get_loss_list(args, model, valid_loader)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "## Reconstruction Error의 평균과 Covarinace 계산\n", "mean = np.mean(loss_list, axis=0)\n", "std = np.cov(loss_list.T)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "## Anomaly Score\n", "class Anomaly_Calculator:\n", " def __init__(self, mean:np.array, std:np.array):\n", " assert mean.shape[0] == std.shape[0] and mean.shape[0] == std.shape[1], '평균과 분산의 차원이 똑같아야 합니다.'\n", " self.mean = mean\n", " self.std = std\n", " \n", " def __call__(self, recons_error:np.array):\n", " x = (recons_error-self.mean)\n", " return np.matmul(np.matmul(x, self.std), x.T)\n", "\n", "## 비정상 점수 계산기\n", "anomaly_calculator = Anomaly_Calculator(mean, std)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5b135b19ff6a4914a43e1985b7750e91", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, max=20581.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "평균[0.10723994875158432], 중간[0.05052389362104756], 최소[0.004605710808467282], 최대[6.393770241747733]\n" ] } ], "source": [ "## Threshold 찾기\n", "anomaly_scores = []\n", "for temp_loss in tqdm(loss_list):\n", " temp_score = anomaly_calculator(temp_loss)\n", " anomaly_scores.append(temp_score)\n", "\n", "## 정상구간에서 비정상 점수 분포\n", "print(\"평균[{}], 중간[{}], 최소[{}], 최대[{}]\".format(np.mean(anomaly_scores), np.median(anomaly_scores), np.min(anomaly_scores), np.max(anomaly_scores)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 전체 데이터 시각화" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "anomaly_calculator = Anomaly_Calculator(mean, std)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6ab3292c32e64553b50a3deb39c5f118", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, description='testing', max=1722.0, style=ProgressStyle(description_wid…" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "146f3d1449024d01a7d15bb07913ef11", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, max=220318.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "## 전체 데이터 불러오기\n", "total_dataset = TagDataset(df=df, input_size=args.input_size, window_size=args.window_size, mean_df=mean_df, std_df=std_df)\n", "total_dataloader = torch.utils.data.DataLoader(dataset=total_dataset,batch_size=args.batch_size,shuffle=False)\n", "\n", "## Reconstruction Loss를 계산하기\n", "total_loss = get_loss_list(args, model, total_dataloader)\n", "\n", "## 이상치 점수 계산하기\n", "anomaly_scores = []\n", "for temp_loss in tqdm(total_loss):\n", " temp_score = anomaly_calculator(temp_loss)\n", " anomaly_scores.append(temp_score)\n", "\n", "visualization_df = total_dataset.df\n", "visualization_df['score'] = anomaly_scores\n", "visualization_df['recons_error'] = total_loss.sum(axis=1)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA54AAAFlCAYAAACDRTcUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAACLvUlEQVR4nO3dd5gUVdYG8Pf2RBgyDCBBhiiSsygiIIIo5rB+rq5xDWtYdU2Ys2JY3TWsrhF1zTkgQRBUUECS5CQMOec0ub4/uqu7urqqurq78ry/5+Fhpqen+s5MddU99557rpAkCURERERERER2CbndACIiIiIiIgo2Bp5ERERERERkKwaeREREREREZCsGnkRERERERGQrBp5ERERERERkKwaeREREREREZKtsJ1+sUaNGUlFRkZMvSSmoKDmI7KzK8CciC8gucOa1krG5LUSAzjnp0LkXfW2e6xRQKV3zrWbB+6qi5CCys8H3p8PKS8uRk5fjdjOIKEVz5szZIUlSofpxRwPPoqIizJ4928mXpBSs/Gk82neJnCMl24FmI5x5rWRsbgsRoHNOOnTuRV+b5zoFVErXfKtZ8L5a+dN4tG8Hvj8dtnT6HBw9oLfbzSCiFAkh1mo9zlRbIiIiIiIishUDTyIiIiIiIrIVA08iIiIiIiKylaNrPImIiIiIiACgvLwcGzZsQElJidtNoTTk5+ejRYsWyMkxVwSMgScRERERETluw4YNqF27NoqKiiCEcLs5lAJJkrBz505s2LABrVu3NvU9TLUlIiIiIiLHlZSUoGHDhgw6fUgIgYYNG6Y0W83Ak4iIiIiIXMGg079S/dsx8CQiIiIiIlKoVauW203Q9OCDD+KZZ55xuxlpYeBJRERERERks4qKCrebYFplZaXlx2TgSURERERE1dJZZ52F3r17o3Pnznj11VfjvnbLLbegc+fOGDp0KLZv3w4AGDx4MO68807069cPHTp0wM8//wwgvF718ssvR9euXdGzZ09MmTIFADBmzBicccYZOPHEEzF06FCMGTMGZ511FoYNG4aioiK8+OKLePbZZ9GzZ0/0798fu3btAgC89tpr6Nu3L7p3745zzz0Xhw4dMvw5PvnkE3Tp0gXdu3fHCSecACAcPN52223o0qULunXrhhdeeAEAMHnyZPTs2RNdu3bFFVdcgdLSUgBAUVER7rzzTvTq1QuffPIJJk6ciGOPPRa9evXC+eefjwMHDmT0u2ZVWyIiIiIictVD3yzGkk37LD1mp2Z18MDpnQ2f8+abb6JBgwY4fPgw+vbti3PPPRcNGzbEwYMH0adPHzz33HN4+OGH8dBDD+HFF18EEJ65nDVrFr777js89NBDmDRpEl566SUIIbBw4UIsW7YMw4cPx4oVKwAAc+fOxYIFC9CgQQOMGTMGixYtwrx581BSUoJ27drhySefxLx583DLLbfgnXfewc0334xzzjkHV111FQDg3nvvxRtvvIEbb7xR9+d4+OGHMWHCBDRv3hx79uwBALz66qsoLi7G/PnzkZ2djV27dqGkpASXXXYZJk+ejA4dOuCSSy7Byy+/jJtvvhkA0LBhQ8ydOxc7duzAOeecg0mTJqGgoABPPvkknn32Wdx///1p/z0440lERESuqJIk/LHTP6lnRBQ8zz//PLp3747+/ftj/fr1WLlyJQAgFArhggsuAABcfPHFmDZtWvR7zjnnHABA7969UVxcDACYNm0aLr74YgBAx44d0apVq2jgOWzYMDRo0CD6/UOGDEHt2rVRWFiIunXr4vTTTwcAdO3aNXq8RYsWYeDAgejatSvee+89LF682PDnGDBgAC677DK89tpr0TTZSZMm4ZprrkF2dniusUGDBli+fDlat26NDh06AAAuvfRS/PTTT9HjyD/zjBkzsGTJEgwYMAA9evTA22+/jbVr16byq03AGU8iIiJyxauzDmL0jwcw9tKG6NzE3AbkRBRMyWYm7TB16lRMmjQJv/76K2rWrInBgwfrbg+irOCal5cHAMjKyjK1brOgoCDuc/n7gXCAK38eCoWix7vsssvw5Zdfonv37hgzZgymTp1q+BqvvPIKZs6cibFjx6J3796YM2dO0nYZtVWSJAwbNgwffPBBWsfRwhlPIiIicsWcjeUAgI37rC9iQUSUzN69e1G/fn3UrFkTy5Ytw4wZM6Jfq6qqwqeffgoAeP/993H88ccbHmvgwIF47733AAArVqzAunXrcNRRR6Xdtv379+OII45AeXl59LhG/vjjDxxzzDF4+OGHUVhYiPXr12PYsGH473//Gw1md+3ahaOOOgrFxcVYtWoVAODdd9/FoEGDEo7Xv39/TJ8+Pfq8gwcPRmdw08XAk4iIiFwlpfj8knIJRU9tQdFTW7DrUJUtbSKi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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "## 시각화 하기\n", "fig = plt.figure(figsize=(16, 6))\n", "ax=fig.add_subplot(111)\n", "\n", "## 불량 구간 탐색 데이터\n", "labels = visualization_df['machine_status'].values.tolist()\n", "dates = visualization_df.index\n", "\n", "\n", "visualization_df['score'].plot(ax=ax)\n", "ax.legend(['abnormal score'], loc='upper right')\n", "\n", "## 고장구간 표시\n", "temp_start = dates[0]\n", "temp_date = dates[0]\n", "temp_label = labels[0]\n", "\n", "for xc, value in zip(dates, labels):\n", " if temp_label != value:\n", " if temp_label == \"BROKEN\":\n", " ax.axvspan(temp_start, temp_date, alpha=0.2, color='blue')\n", " if temp_label == \"RECOVERING\":\n", " ax.axvspan(temp_start, temp_date, alpha=0.2, color='orange')\n", " temp_start=xc\n", " temp_label=value\n", " temp_date = xc\n", "if temp_label == \"BROKEN\":\n", " ax.axvspan(temp_start, xc, alpha=0.2, color='blue')\n", "if temp_label == \"RECOVERING\":\n", " ax.axvspan(temp_start, xc, alpha=0.2, color='orange')" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "## 시각화 하기\n", "fig = plt.figure(figsize=(16, 6))\n", "ax=fig.add_subplot(111)\n", "\n", "## 불량 구간 탐색 데이터\n", "labels = visualization_df['machine_status'].values.tolist()\n", "dates = visualization_df.index\n", "\n", "\n", "visualization_df['recons_error'].plot(ax=ax)\n", "ax.legend(['reconstruction error'], loc='upper right')\n", "\n", "## 고장구간 표시\n", "temp_start = dates[0]\n", "temp_date = dates[0]\n", "temp_label = labels[0]\n", "\n", "for xc, value in zip(dates, labels):\n", " if temp_label != value:\n", " if temp_label == \"BROKEN\":\n", " ax.axvspan(temp_start, temp_date, alpha=0.2, color='blue')\n", " if temp_label == \"RECOVERING\":\n", " ax.axvspan(temp_start, temp_date, alpha=0.2, color='orange')\n", " temp_start=xc\n", " temp_label=value\n", " temp_date = xc\n", "if temp_label == \"BROKEN\":\n", " ax.axvspan(temp_start, xc, alpha=0.2, color='blue')\n", "if temp_label == \"RECOVERING\":\n", " ax.axvspan(temp_start, xc, alpha=0.2, color='orange')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }